package com.master.chat.llm.locallm.dify.entity;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.master.chat.llm.locallm.base.BaseChatCompletion;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;

import java.util.HashMap;
import java.util.Map;

@Data
@Builder
@Slf4j
@NoArgsConstructor(force = true)
@AllArgsConstructor
public class ChatCompletion extends BaseChatCompletion {

    /**
     *  用户输入/提问内容。
     */
    private String query;

    /**
     * 用户ID
     */
    @JsonProperty("user")
    private String userId;

    /**
     * streaming：流式输出，即 Bot 返回的消息是增量的，可以通过消息类型判断是否结束。
     * blocking：阻塞输出，即 Bot 返回的消息是一次性的，不支持增量返回。
     */
    @JsonProperty("response_mode")
    private String responseMode = "streaming";

    /**
     * 会话 ID
     */
    @JsonProperty("conversation_id")
    private String conversationId;

    private DifyRequestFile[] files;

    /**
     * 自动生成标题
     * 默认 true。 若设置为 false，则可通过调用会话重命名接口并设置 auto_generate 为 true 实现异步生成标题。
     */
    @JsonProperty("auto_generate_name")
    private Boolean autoGenerateName = true;

    /**
     * bot id
     */
    @JsonProperty("bot_id")
    private String botId;

    /**
     * 是否流式输出
     */
    @JsonProperty("stream")
    private Boolean stream;

    /**
     * 自定义参数 Bot中定义的变量
     */
    @JsonProperty("custom_variables")
    private Map<String, String> customVariables;

    /**
     * 是否保存本次对话记录
     */
    @JsonProperty("auto_save_history")
    private Boolean autoSaveHistory;

    /**
     * 允许传入 App 定义的各变量值。
     * inputs 参数包含了多组键值对（Key/Value pairs），每组的键对应一个特定变量，每组的值则是该变量的具体值。 默认 {}
     */
    private Map<String, Object> inputs = new HashMap<>();

}


